home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d883.lha / BBBBS / BBBBS59.lha / rexx / BuildALPHA.rexx < prev    next >
OS/2 REXX Batch file  |  1992-08-28  |  9KB  |  332 lines

  1. /*      $VER: 5.6 BuildALPHA.rexx 27 Aug 1992 (27.8.92)
  2. copyright 1990-91-92 Richard Lee Stockton FREELY DISTRIBUTABLE
  3.  
  4.    Build the main filelist "Lists/Files" from the filenotes,
  5. then build "Lists/Files.ALPHA" from that list and the filenotes.
  6.  
  7. If COLLECT is passed as an argument, will collect files that have
  8. no file description and construct descriptions for them using the
  9. filecomment of the file (if any) for note data. Note that the
  10. filecomment is then blanked so it won't interfere with displays.
  11.  
  12. IF NOFILEBUILD is passed the argument, only the ALPHA list is rebulit.
  13. */
  14.  
  15. ARG collectflag .
  16.  
  17. IF collectflag='?' THEN
  18.   DO
  19.     DO i=1 TO 14
  20.       SAY SOURCELINE(i)
  21.     END
  22.     EXIT
  23.   END
  24.  
  25.  
  26. /* If the QuickSortPort not found then try to run setup.rexx */
  27.  
  28. IF ~show('P','QuickSortPort') THEN CALL setup.rexx()
  29. IF ~show('P','QuickSortPort') THEN CALL GETOUT(666)
  30.  
  31. figarg='s:CONFIG.BBS'
  32. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  33. x=OPEN(f,figarg,'R')
  34. IF x=0 THEN
  35.   DO
  36.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  37.     EXIT(20)
  38.   END
  39.  
  40. lynes.=''
  41. DO i=1 TO 8
  42.   lynes.i=READLN(f)
  43. END
  44. CALL CLOSE(f)
  45.  
  46. compos=POS('/*',lynes.1)
  47. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  48.  
  49. bbsname = STRIP(lynes.1)
  50. sysop   = WORD(lynes.2,1)
  51. bbspath = WORD(lynes.6,1)
  52. IF ~EXISTS(bbspath) THEN
  53.   DO
  54.     SAY 'The bbspath, 'bbspath', does not exist!'
  55.     EXIT(21)
  56.   END
  57. testchar=RIGHT(bbspath,1)
  58. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  59. libpath = WORD(lynes.8,1)
  60. IF ~EXISTS(libpath) THEN
  61.   DO
  62.     SAY 'The library path, 'libpath', does not exist!'
  63.     EXIT(22)
  64.   END
  65. testchar=RIGHT(libpath,1)
  66. IF testchar~='/' & testchar~=':' THEN libpath=libpath'/'
  67.  
  68. IF SHOW('P','BBBBS') THEN CALL PRAGMA('P',-2)
  69. etime=TIME('R')
  70.  
  71. IF collectflag='COLLECT' THEN
  72.   DO
  73.     OPTIONS PROMPT 'Shall I clear each filecomment after using in the description? (Yn) > '
  74.     PULL clearflag .
  75.     clearflag=LEFT(STRIP(clearflag),1)
  76.     SAY 'Searching for files with no file descriptions...'
  77.     filelibs=SHOWDIR(libpath,'D')
  78.     DO i=1 TO WORDS(filelibs)
  79.       thislib=WORD(filelibs,i)
  80.       realfiles=SHOWDIR(libpath||thislib)
  81.       DO j=1 TO WORDS(realfiles)
  82.         thisfile=WORD(realfiles,j)
  83.         IF ~EXISTS(bbspath'FileNotes/'thislib'/'thisfile) THEN CALL makenote
  84.       END
  85.     END
  86.     IF ~DATATYPE(lastfile,'N') THEN
  87.       DO
  88.         SAY 'All files in the libraries have descriptions.'
  89.         EXIT
  90.       END
  91.   END
  92.  
  93. IF collectflag~='NOFILEBUILD' | ~EXISTS(bbspath'Lists/Files') THEN
  94.   DO
  95.     libs=SHOWDIR(bbspath'FileNotes','D')
  96.     lynes.=''
  97.     latest=0
  98.     SAY 'Building Files list.'
  99.     DO i=1 TO WORDS(libs)
  100.       lib=WORD(libs,i)
  101.       notes=SHOWDIR(bbspath'FileNotes/'lib,'F')
  102.       DO j=1 TO WORDS(notes)
  103.         note=WORD(notes,j)
  104.         file=libpath||lib'/'note
  105.         IF ~EXISTS(file) THEN
  106.           DO
  107.             temp=WORD(STATEF(bbspath'FileNotes/'lib'/'note),8)
  108.             IF temp~='' THEN file=temp
  109.             IF ~EXISTS(file) THEN SAY file 'does not exist.'
  110.           END
  111.         IF OPEN(f,bbspath'FileNotes/'lib'/'note,'R')=0 THEN
  112.           DO
  113.             IF EXISTS(file) THEN
  114.               SAY 'Could not open file description for' lib'/'note
  115.             ELSE SAY libpath||lib'/'note 'does not exist.'
  116.             ITERATE j
  117.           END
  118.         line=READLN(f)
  119.         filenum=WORD(line,2)
  120.         IF ~DATATYPE(filenum,'N') THEN
  121.           DO
  122.             SAY '*** Bad file description!' lib'/'note
  123.             SAY line
  124.             ITERATE j
  125.           END
  126.         filenum=filenum%1
  127.         line=READLN(f)
  128.         filename=STRIP(WORD(line,2))
  129.         CALL CLOSE(f)
  130.         IF UPPER(filename)~=UPPER(note) THEN
  131.           DO
  132.             SAY 'Name: field does not match actual filename!'
  133.             SAY 'Changing Name: 'filename' in file description to 'note
  134.             x=OPEN(f,bbspath'FileNotes/'lib'/'note,'R')
  135.             IF x=0 THEN EXIT 20
  136.             text.=''
  137.             DO i=1
  138.               x=READLN(F)
  139.               IF EOF(f) THEN LEAVE i
  140.               text.i=x
  141.             END
  142.             CALL CLOSE(f)
  143.             text.0=i-1
  144.             text.2=OVERLAY(note,text.2,7,27)
  145.             CALL DELAY(50)
  146.             x=OPEN(f,bbspath'FileNotes/'lib'/'note,'W')
  147.             IF x=0 THEN EXIT 20
  148.             DO i=1 TO text.0
  149.               CALL WRITELN(f,text.i)
  150.             END
  151.             CALL CLOSE(f)
  152.             filename=note
  153.           END
  154.         lynes.filenum=lib filename
  155.         IF filenum>latest THEN latest=filenum
  156.       END
  157.     END
  158.     CALL SETCLIP('BBS_maint','File-Building')
  159.     SAY 'Writing Files list.'
  160.     x=OPEN(f,bbspath'Lists/Files','W')
  161.     IF x=0 THEN
  162.       DO
  163.         SAY '*** Failure!  Error opening' bbspath'Lists/Files'
  164.         CALL GETOUT(23)
  165.       END
  166.     DO i=1 TO latest
  167.       IF lynes.i='' THEN ITERATE i
  168.       CALL WRITELN(f,i lynes.i)
  169.     END
  170.     CALL CLOSE(f)
  171.     CALL SETCLIP('BBS_maint')
  172.   END
  173.  
  174. SAY 'Reading Libraries list.'
  175.  
  176. x=OPEN(f,bbspath'Lists/Libraries','R')
  177. IF x=0 THEN CALL GETOUT(24);
  178. libs.=''
  179. DO i=1
  180.   line=READLN(f)
  181.   IF EOF(f) THEN LEAVE i
  182.   indx=WORD(line,1)
  183.   IF ~DATATYPE(indx,'N') THEN ITERATE i
  184.   libname=UPPER(WORD(line,2))
  185.   libs.libname=indx
  186. END
  187. CALL CLOSE(f)
  188.  
  189. SAY 'Reading Files list.'
  190.  
  191. x=OPEN(f,bbspath'Lists/Files','R')
  192. IF x=0 THEN CALL GETOUT(25);
  193. lynes.=''
  194. DO i=1
  195.   line=READLN(f)
  196.   IF EOF(f) THEN LEAVE i
  197.   lynes.i=line
  198. END
  199. CALL CLOSE(f)
  200. lynes.0=i-1
  201.  
  202. SAY 'Building Files.ALPHA list.'
  203.  
  204. DO i=1 TO lynes.0
  205.   num=WORD(lynes.i,1)
  206.   lib=WORD(lynes.i,2)
  207.   libname=UPPER(lib)
  208.   file=WORD(lynes.i,3)
  209.   fullfile=libpath||lib'/'file
  210.   IF ~EXISTS(fullfile) THEN
  211.     DO
  212.       temp=WORD(STATEF(bbspath'FileNotes/'lib'/'file),8)
  213.       IF temp~='' THEN fullfile=temp
  214.       IF ~EXISTS(fullfile) THEN SAY fullfile 'does not exist.'
  215.     END
  216.   IF OPEN(f,bbspath'FileNotes/'lib'/'file,'R')=0 THEN
  217.     DO
  218.       IF EXISTS(fullfile) THEN
  219.         SAY 'Could not find filenote for' lib'/'file '!'
  220.       ELSE SAY fullfile 'has neither file nor note!'
  221.       ITERATE i
  222.     END
  223.   line=READLN(f)
  224.   PARSE VAR line . 'KeyWords:' keywords
  225.   notebytes=WORD(READLN(f),4)
  226.   CALL CLOSE(f)
  227.   bytes=0
  228.   IF EXISTS(fullfile) THEN
  229.     DO
  230.       bytes=WORD(STATEF(fullfile),2)
  231.       IF bytes~=notebytes THEN CALL fixnote
  232.     END
  233.   ELSE bytes=notebytes
  234.   lynes.i=LEFT(file,22-LENGTH(bytes)) bytes RIGHT(num,5) RIGHT(libs.libname,2)
  235.   lynes.i=lynes.i LEFT(lib,12) TRIM(LEFT(STRIP(keywords),32))
  236. END
  237.  
  238. SAY 'Sorting Files.ALPHA list.'
  239.  
  240. CALL QSORT(1,lynes.0,lynes)
  241.  
  242. SAY 'Saving Files.ALPHA list.'
  243.  
  244. CALL SETCLIP('BBS_maint','File-Building')
  245. x=OPEN(f,bbspath'Lists/Files.ALPHA','W')
  246. IF x=0 THEN CALL GETOUT(25)
  247. DO i=1 TO lynes.0
  248.   CALL WRITELN(f,lynes.i)
  249. END
  250. CALL CLOSE(f)
  251. CALL SETCLIP('BBS_maint')
  252. CALL GETOUT(0)
  253. EXIT
  254.  
  255.  
  256. GETOUT:
  257. ARG outnum .
  258. CALL SETCLIP('BBS_maint')
  259. IF outnum>0 THEN SAY 'Error number' outnum'.  Refer to BuildALPHA.rexx'
  260. mins=TIME('E')%60
  261. secs=TRUNC(TIME('E')//60)
  262. IF secs<10 THEN secs='0'secs
  263. SAY 'Elapsed time file building =' mins':'secs
  264. EXIT(outnum);
  265.  
  266.  
  267. fixnote:
  268. SAY 'Fixing bytes field for' lib'/'file
  269. fixfile=bbspath'FileNotes/'lib'/'file
  270. finfo=STATEF(fixfile)
  271. comment=''
  272. IF WORDS(finfo)>7 THEN comment=STRIP(SUBSTR(finfo,WORDINDEX(finfo,8)))
  273. fxlines.=''
  274. x=OPEN(f,fixfile,'R')
  275. IF x=0 THEN
  276.   DO
  277.     SAY 'Failed to open' fixfile 'for reading! (byte adjustment)'
  278.     RETURN
  279.   END
  280. DO fx=1
  281.   line=READLN(f)
  282.   IF EOF(f) THEN LEAVE fx
  283.   fxlines.fx=line
  284. END
  285. CALL CLOSE(f)
  286. fxlines.0=fx-1
  287. fxlines.2=OVERLAY(bytes,fxlines.2,WORDINDEX(fxlines.2,4),LENGTH(bytes)+1)
  288. x=OPEN(f,fixfile,'W')
  289. IF x=0 THEN
  290.   DO
  291.     SAY 'Failed to open' fixfile 'for writing! (byte adjustment)'
  292.     RETURN
  293.   END
  294. DO fx=1 TO fxlines.0
  295.   CALL WRITELN(f,fxlines.fx)
  296. END
  297. CALL CLOSE(f)
  298. IF comment~='' THEN ADDRESS COMMAND 'filenote' fixfile comment
  299. RETURN
  300.  
  301.  
  302. makenote:
  303. CALL MAKEDIR(bbspath'FileNotes/'thislib)
  304. x=OPEN(f,bbspath'FileNotes/'thislib'/'thisfile,'W')
  305. IF x=0 THEN
  306.   DO
  307.     SAY bbspath'FileNotes/'thislib'/'thisfile 'failed to open!'
  308.     RETURN
  309.   END
  310. x=OPEN(ff,bbspath'Numbers/LastFile','R')
  311. IF x~=0 THEN lastfile=READLN(ff)+1
  312. ELSE lastfile=1
  313. CALL CLOSE(ff)
  314. ADDRESS COMMAND 'ECHO >'bbspath'Numbers/LastFile 'lastfile
  315. finfo=STATEF(libpath||thislib'/'thisfile)
  316. bytes=WORD(finfo,2)
  317. comment=''
  318. IF WORDS(finfo)>7 THEN comment=STRIP(SUBSTR(finfo,WORDINDEX(finfo,8)))
  319. CALL WRITELN(f,'File: 'LEFT(lastfile,5)' KeyWords:' STRIP(LEFT(comment,31)))
  320. CALL WRITELN(f,'Name: 'LEFT(thisfile,27)' Size: 'bytes' bytes   Downloads: 0')
  321. CALL WRITELN(f,'From: 'LEFT(sysop,27)' Date: 'DATE() TIME('C')'  Lib: 'thislib)
  322. CALL WRITELN(f,LEFT('',74,'='))
  323. IF LENGTH(comment)>31 THEN CALL WRITELN(f,comment)
  324. CALL CLOSE(f)
  325. IF comment~='' & clearflag~='N' THEN
  326.   ADDRESS COMMAND 'filenote' libpath||thislib'/'thisfile '22'x||'22'x
  327. SAY 'Added' thisfile 'to the' thislib 'library.'
  328. RETURN
  329.  
  330.  
  331. /* Build ALPHA.rexx */
  332.